Code coverage report for src/rollbar.js

Statements: 34.78% (24 / 69)      Branches: 0% (0 / 16)      Functions: 0% (0 / 17)      Lines: 34.78% (24 / 69)      Ignored: none     

All files » src/ » rollbar.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126    1 1 1 1 1                                     1         1   1         1                     1         1       1       1       1       1       1       1       1       1       1           1                                     1       1              
var RateLimiter = require('./rateLimiter');
var Queue = require('./queue');
var Notifier = require('./notifier');
var Telemeter = require('./telemetry');
var _ = require('./utility');
 
/*
 * Rollbar - the interface to Rollbar
 *
 * @param options
 * @param api
 * @param logger
 */
function Rollbar(options, api, logger, platform) {
  this.options = _.extend(true, {}, options);
  this.logger = logger;
  Rollbar.rateLimiter.setPlatformOptions(platform, this.options);
  this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);
  this.notifier = new Notifier(this.queue, this.options);
  this.telemeter = new Telemeter(this.options);
  this.lastError = null;
}

var defaultOptions = {
  maxItems: 0,
  itemsPerMinute: 60
};
 
Rollbar.rateLimiter = new RateLimiter(defaultOptions);
 
Rollbar.prototype.global = function(options) {
  Rollbar.rateLimiter.configureGlobal(options);
  return this;
};

Rollbar.prototype.configure = function(options, payloadData) {
  this.notifier && this.notifier.configure(options);
  var oldOptions = this.options;
  var payload = {};
  if (payloadData) {
    payload = {payload: payloadData};
  }
  this.options = _.extend(true, {}, oldOptions, options, payload);
  return this;
};

Rollbar.prototype.log = function(item) {
  var level = this._defaultLogLevel();
  return this._log(level, item);
};

Rollbar.prototype.debug = function(item) {
  this._log('debug', item);
};

Rollbar.prototype.info = function(item) {
  this._log('info', item);
};

Rollbar.prototype.warn = function(item) {
  this._log('warning', item);
};

Rollbar.prototype.warning = function(item) {
  this._log('warning', item);
};

Rollbar.prototype.error = function(item) {
  this._log('error', item);
};

Rollbar.prototype.critical = function(item) {
  this._log('critical', item);
};

Rollbar.prototype.wait = function(callback) {
  this.queue.wait(callback);
};

Rollbar.prototype.captureEvent = function(metadata, level) {
  return this.telemeter.captureEvent(metadata, level);
};

Rollbar.prototype.captureDomContentLoaded = function(ts) {
  return this.telemeter.captureDomContentLoaded(ts);
};

Rollbar.prototype.captureLoad = function(ts) {
  return this.telemeter.captureLoad(ts);
};

/* Internal */
 
Rollbar.prototype._log = function(defaultLevel, item) {
  if (this._sameAsLastError(item)) {
    return;
  }
  try {
    var callback = null;
    if (item.callback) {
      callback = item.callback;
      delete item.callback;
    }
    item.level = item.level || defaultLevel;
    item.telemetryEvents = this.telemeter.copyEvents();
    this.telemeter._captureRollbarItem(item);
    this.notifier.log(item, callback);
  } catch (e) {
    this.logger.error(e)
  }
};
 
Rollbar.prototype._defaultLogLevel = function() {
  return this.options.logLevel || 'debug';
};

Rollbar.prototype._sameAsLastError = function(item) {
  if (this.lastError && this.lastError === item.err) {
    return true;
  }
  this.lastError = item.err;
  return false;
};

module.exports = Rollbar;